Definitions:
	#region Screen	
	float GROUND_Y = (viewPort.height - viewPort.height / 5);
	float SCREEN_MIN_Y= 0;
	float SCREEN_MIN_X = 0;
	float SCREEN_MAX_Y = viewPort.height;
	float SCREEN_MAX_X = viewPort.width;
	
	#region Gun
	float GUN_X = (viewPort.width / 2);
	float GUN_Y = GROUND_Y - GUN_HEIGHT;

	

	//milliseconds
	float LASERLIFETIME = 300;
	float GUNCOOLDOWN = 1000;


Class Game: 

	Update(see if lives == 0 -> end game, create UFOS at random);

	//called when UFO gets destroyed
	void incrementScore(int value);
	{
		m_score += value;
	}

	void adjustLives(bool increment)
	{
		if (increment) ++m_lives;
		else	--m_lives;
	}

	
	int m_score;
	int m_lives;

class GameOverScreen: DrawableGameComponent

	Rectangle m_location;


Class UFO: DrawableGameComponent

	Update (move towards target, if target is within Rectangle, calculate new target, if Rectangle touches ground, player loses life)
	
	public void checkForCollision(Observer-Based function, missile and laser broadcasts to all UFOs);

	private Vector2 newTarget()
	{
		m_target.X = (float)random(


	Rectangle m_location;
	const int m_speed;
	Vector2 m_target;
	


Class LaserGun: DrawableGameComponent
	
	//not movable if previous laser is still on the screen	(timeSinceLastShot < LASERLIFETIME)
	bool m_movable;

	Vector2 m_target;
	bool m_onCooldown;
	double m_timeSinceLastShot;
	static m_const double coolDown; (1 sekunti?)


	Update ( take in mouse movement->calculate angle,take in mouse clicking->shoot missile, update timeSinceLastShot)



Class Laser: DrawableGameComponent

	Line m_laserLine;
	UFOCollisionObserver m_UFOobserver;
	double timeSinceCreation;
	static const int maxLifeTime; (0,3 sekuntia?)
	color Color; (random?)

	Update(check for contact with UFO rectangles, update timeSinceCreation, compare timeSinceCreation to maxLifeTime)


Class MissilePad:

	Update( take in keys A D space)

	const int speed;
	float m_posX;


Class Missile:
	
	UFOCollisionObserver m_UFOobserver;
	Update( move missile upwards, check for collision with UFOs)

	const int Xpos;

	int speed; (increasing?)

Class MissileExplosion:

	UFOCollisionObserver m_UFOobserver;
	double timeSinceCreation;

	static const int maxLifeTime; (0,3 sekuntia?)

	Update(check for contact with UFO rectangles, update timeSinceCreation, compare timeSinceCreation to maxLifeTime)

Class UFOCollisionObserver;

	Notify(Line laser);
	Notify(Rectangle missile);
	Notify(Rectangle missileExplosion);
	
	Notify-funktio: kutsuu kaikkien m_observereiden checkForCollision-funktioita;

	List<UFO*> m_observers;